'''7.5.1 基于维度的数据分类'''

# 1.一维数据
# 一维数据是具有对等关系的一组线性数据,对应数学之中的集合和一维数组,
# 在Python语法中,一维列表,一维元组和一维集合都是一维数据.可通过逗号,空格等符号分隔一维数据中的各个元素.

# 2.二维数据
# 二维数据关联参数的数量为2,此种数据对应数学之中的矩阵和二维数组
# 在Python语法中,二维列表,二维元组等都是二维数据.表格是日常生活中最常见的二维数据的组织形式.

# 3.多维数据
# 多维数据利用键值对等简单的二元关系展示数据间的复杂结构,Python中字典类型的数据是多维数据

'''7.5.2 一维数据和二维数据的存储与读写'''
# 二维数据可以视为多条一维数据的集合,当二维数据只有一个元素时,这个二维数据就是一维数据.
# 国际上通用的一维数据和二维数据存储格式为CSV
# CSV文件以纯文本形式存储表格数据,文件的每一行对应表格中的一条数据记录,每条记录由一个或多个字段组成,
# 字段之间使用逗号分隔.因为字段之间可能使用除逗号外的其他分隔符,所以CSV也称为字符分隔值.
# 具体实例如下:
'''
姓名,语文,数学,英语,理综
刘静,124,137,145,260
张华,116,143,139,263
邢昭林,120,130,148,255
具意义,115,145,131,240
黄丽萍,123,108,121,235
赵越,132,100,112,210
'''
# CSV广泛用于不同体系结构下网络应用程序之间表格信息的交换中,它本身并无明确格式标准,具体标准一般有传输上方协商决定

# 2.数据读取
# 将以上实例中CSV格式的数据存储到当前路径下的score.csv文件中,通过Python程序读取该文件中的数据,并以列表形式打印:
csv_file = open('score.csv','r',encoding='utf-8')
lines = []
for line in csv_file:
    line = line.replace('\n','')
    lines.append(line.split(','))
print(lines)
csv_file.close()
'''
str.split(sep=None, maxsplit=-1)
sep：分隔符（默认按空白符分割）
maxsplit：最大分割次数（默认全部分割）
'''

# 3.数据写入
# 将一维数据,二维数据写入文件中,即按照数据的组织形式,在文件中添加新的数据.
# 在保存学生层级的文件score.csv中写入每名学生的总分,具体代码如下:
csv_file = open('score.csv',mode='r',encoding='utf-8') # 以只读方式打开原始文件
file_new = open('count.csv','w+',encoding='utf-8') # 以读写方式创建新文件
lines = []
for line in csv_file: # 逐行读取文件内容
    line = line.replace('\n','') # 删除行尾换行符
    lines.append(line.split(',')) # 按逗号分割成列表
'''    假设原始文件内容：
    姓名, 语文, 数学, 英语
    张三, 85, 90, 88
    李四, 78, 82, 95
    处理结果：
lines = [['姓名', '语文', '数学', '英语'],['张三', '85', '90', '88'],['李四', '78', '82', '95']]'''
# 添加表头字段
lines[0].append('总分') # 在第一行添加新字段 # lines[0] = ['姓名', '语文', '数学', '英语', '总分']
# 添加总分
for i in range(len(lines)-1):# 遍历除表头外的行
    idx = i + 1
    sum_score = 0
    for j in range(len(lines[idx])):# 遍历每列数据
        if lines[idx][j].isnumeric():# 判断是否为数字字符串
            sum_score += int(lines[idx][j])# 累加数值
    lines[idx].append(str(sum_score))# 添加总分
for line in lines:
    print(line)# 控制台输出
    file_new.write(','.join(line)+'\n')# 拼接CSV行
'''# 列表转字符串：将列表line中的元素用逗号拼接成字符串
   #line = ['张三', '85', '90', '88', '263']
   #joined = ','.join(line) # 转换为"张三,85,90,88,263"'''
'''  输出结果示例
    姓名, 语文, 数学, 英语, 总分
    张三, 85, 90, 88, 263
    李四, 78, 82, 95, 255
    '''
csv_file.close()
file_new.close()